package com.htd.base.modules.translate.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.htd.base.modules.translate.model.*;
import com.htd.base.modules.translate.model.*;

import java.util.List;
import java.time.LocalDateTime;

public interface LsCoreTranslateIF {
    /**
     * 根据fromTable和fromField、fromDataId获取语言包内容
     * @param fromTable 业务表名
     * @param fromField 业务字段名
     * @param fromDataId 業務ID
     * @return 语言包的唯一key值
     */
    ComLangModel getLangContentByFrom(String fromTable, String fromField, String fromDataId);

    /**
     * 获取语言包的唯一key值
     * @param fromTable 业务表名
     * @param fromField 业务字段名
     * @param description 描述/备注
     * @param operator 操作人
     * @return 语言包的唯一key值
     */
    String getUniqueItemKey(String fromTable,String fromField,String description,String operator);

    /**
     * 獲取完整語言包內容
     * @param itemKey 表名/功能代碼
     * @return 语言包的唯一key值
     */
    ComLangModel getFullContentByItemKey(String itemKey);

    /**
     * 根據語言唯一key值，獲取Header设定语种的語言内容
     * @param itemKey 表名/功能代碼
     * @return 语言包的唯一key值
     */
    ComLangContentModel getSingleContentByItemKey(String itemKey);

    /**
     * 根據語言唯一key值，獲取語言包内容
     * @param itemKey 表名/功能代碼
     * @return 语言包的唯一key值
     */
    ComLangContentModel getLangContentByItemKey(String itemKey, String langCode);

    /**
     * 新增/更新指定語種語言内容
     * @param itemKey 语言包的唯一key值
     * @param langCode 语言代碼 英語（en）,英語美國（en-US），中文（cn),简体中文（zh_CN），繁体中文（zh_TW） 等
     * @param content 语言包内容
     * @return 是否新增成功
     */
    Boolean saveContentByItemKey(String itemKey, String langCode, String content,String operator);

    /**
     * 獲取語種列表
     * @return 語種列表
     */
    List<ComLangCodeModel> getLangCodeList();

    /**
     * 获取已应用多语言的业务表名、字段名列表
     * @return 业务表名、字段名列表
     */
    Page<ComTableFieldModel> getFromTableAndFieldList(int pageNum, int pageSize);

    /**
     * 一次性保存整个语言包的内容
     * @param saveLangContentModel 保存语言包内容的Model
     * @return 是否保存成功
     */
    Boolean saveFullContentByItemKey(SaveLangContentModel saveLangContentModel);

    /**
     * 获取无主语言项列表
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param itemKey 语言包唯一key值（可选）
     * @param fromTable 来源表名（可选）
     * @param fromField 来源字段名（可选）
     * @param memo 備注（可选）
     * @return 分页结果
     */
    public Page<AutoLanguageItemModel> getNoMasterLanguageItemPage(Integer pageNum, Integer pageSize,
                                                                   String itemKey, String fromTable, String fromField, String memo);
    /**
     * 分页查询语言包项列表
     * @param pageNum 页码（默认1）
     * @param pageSize 每页大小（默认10）
     * @param itemKey 语言包唯一key值（可选）
     * @param fromTable 来源表名（可选）
     * @param fromField 来源字段名（可选）
     * @param memo 備注（可选）
     * @return 分页结果
     */
    Page<AutoLanguageItemModel> getLanguageItemPage(Integer pageNum, Integer pageSize, String itemKey, String fromTable, String fromField, String fromDataId, String memo);

    /**
     * 根据itemKey或fromDataId删除多语言内容
     * @param itemKey 语言包唯一key值
     * @param fromDataId 来源数据ID
     * @param operator 操作人
     * @return 是否删除成功
     */
    Boolean logicDelLanguageContent(String itemKey, String fromDataId, String operator);

    /**
     * 删除指定日期之前的未删除数据
     * @param beforeDate 指定日期
     * @param operator 操作人
     * @return 删除的记录数
     */
    Integer delLanguageContentBeforeDate(LocalDateTime beforeDate, String operator);

    /**
     * 刷新Redis缓存
     * @return 是否刷新成功
     */
    Boolean refreshRedis();
}
